class Anagrafiche::PersonaleController < DefaultController
  require_role self.parent_name.underscore
  record_select :search_on => [:cognome, :nome, :chiavi_ricerca], :order_by => 'cognome ASC', :full_text_search => true

  active_scaffold :personale do | config|
    config.label = Application.controller_label(self)
    config.subform.columns = [:cognome, :nome]
    list.sorting = {:cognome => 'ASC'}
    config.actions.add :config_list, :export, :field_search

    # visualizzazione colonne
    long_fields = [:attivo, :matricola, :data_assunzione, :qualifica, :cognome, :nome, :chiavi_ricerca, :indirizzo, :indirizzi_aggiuntivi,
      :cap, :localita, :provincia, :nazione, :telefono, :mail, :cellulare, :codice_fiscale, :data_nascita,
      :luogo_nascita, :nazionalita, :sesso, :stato_civile, :svantaggiato, :tipo_svantaggio,
      :mansioni, :centri_costo, :metodo_pagamento, :coordinate_bancarie, :taglie_personale, :foto, :requisiti_formativi_personale]
    short_fields = [:matricola, :cognome, :nome, :cellulare, :data_nascita, :luogo_nascita, :codice_fiscale, :indirizzo, :localita, :cap]
    config.columns = long_fields
    config.list.columns = long_fields
    config.config_list.default_columns = short_fields
    config.show.columns = short_fields + [:telefono, :data_nascita, :luogo_nascita, :foto, :mansioni]
    config.create.columns.exclude [:attivo, :matricola, :qualifica, :centri_costo, :data_assunzione, :requisiti_formativi_personale]
    config.update.columns.exclude [:attivo, :matricola, :qualifica, :centri_costo, :data_assunzione, :requisiti_formativi_personale]
    config.field_search.columns.exclude [:taglie_personale, :requisiti_formativi_personale, :indirizzi_aggiuntivi, :coordinate_bancarie]

    # configurazione colonne
    config.columns[:nazione].form_ui = :country
    config.columns[:nazione].options[:priority] = "Italy"
    [:sesso, :stato_civile, :metodo_pagamento, :mansioni, :provincia].each { |i|
      config.columns[i].form_ui = :select }
    config.columns[:sesso].options = {:options => Personale::SEX.map(&:to_sym), :include_blank => as_(:_select_)}
    config.columns[:provincia].options = {:options => IndirizzoAggiuntivo::PROVINCE_ITALIANE.sort.map(&:to_sym), :include_blank => as_(:_select_)}
    config.columns[:stato_civile].options = {:options => Personale::STATO_CIVILE.map(&:to_sym), :include_blank => as_(:_select_)}
    [:sesso, :stato_civile, :metodo_pagamento, :nazione, :cellulare, :telefono, :mansioni].each { |i|
      config.columns[i].inplace_edit = :ajax }
    config.columns[:data_nascita].form_ui = :calendar_date_select
    config.columns[:data_nascita].options = {:year_range => [60.years.ago, 15.years.ago]}
    config.columns[:taglie_personale].label = "Taglie"
    config.columns[:attivo].form_ui = :checkbox
    config.columns[:foto].sort_by :sql => 'foto_file_name'
    config.columns[:mansioni].search_ui = :multi_select

    # subgroup
    dati_contabili = [:metodo_pagamento, :coordinate_bancarie]
    residenza = [:indirizzo, :cap, :localita, :provincia, :nazione]
    config.create.columns.add_subgroup "Residenza" do |group|
      group.add(residenza)
      group.collapsed = false
    end
    config.update.columns.add_subgroup "Residenza" do |group|
      group.add(residenza)
      group.collapsed = false
    end
    
    config.create.columns.add_subgroup "Dati contabili" do |group|
      group.add(dati_contabili)
      group.collapsed = true
    end
    config.update.columns.add_subgroup "Dati contabili" do |group|
      group.add(dati_contabili)
      group.collapsed = true
    end
    
    [:indirizzi_aggiuntivi, :taglie_personale].each { |i|
      config.create.columns.exclude i
      config.update.columns.exclude i
      config.create.columns.add i
      config.update.columns.add i
      config.columns[i].collapsed = true
    }

    # azioni
    config.search.columns << :note
    config.columns[:note].search_sql = 'note.testo'
    config.columns[:mansioni].clear_link
    config.columns[:taglie_personale].actions_for_association_links = [:show]
    config.columns[:indirizzo].set_link('nested', :parameters => {:associations => :indirizzi_aggiuntivi})
    
    config.columns[:matricola].set_link('nested', :parameters => {:associations => :rapporti_di_lavoro})
    config.columns[:cognome].set_link('dettagli', :inline => false, :popup => true)
    config.action_links.add "Note", :action => 'nested', :parameters => {:associations => :note}, :type => :member
    config.action_links.add "Allegati", :action => 'nested', :parameters => {:associations => :allegati}, :type => :member

    #config.action_links.add "Requisiti", :action => 'genera_requisiti_formativi_personale', :type => :member, :inline => false
  end

  def all
    params[:filter] = 'all'
    active_scaffold_config.label = Application.controller_label(self) + " (tutti)"
    index
  end

  def attivi
    params[:filter] = 'attivi'
    active_scaffold_config.label = Application.controller_label(self) + " (attivi)"
    index
  end

  def non_attivi
    params[:filter] = 'non_attivi'
    active_scaffold_config.label = Application.controller_label(self) + " (non attivi)"
    index
  end
 
  def tesserino
    @personale = Personale.find(params[:id])
    filename = "Tesserino #{@personale.name}".gsub(" ","_")
    prawnto :filename => filename + ".pdf", :inline => false
  end
  
  def dettagli
    @record = Personale.find(params[:id])
  end
  
  def genera_requisiti_formativi_personale
    Personale.all.each { |record| 
      if record.attivo == true
        record.mansioni.each { |i|
        i.requisiti_formativi.each { |r|
          dati = Sheet.first(:conditions => ['personale = ? AND requisito = ?',"#{record.cognome} #{record.nome}", r.name])
          RequisitoFormativoPersonale.new(:requisito_formativo_id => r.id, :personale_id => record.id,
                                        :data_valutazione => (dati.data unless dati.nil?),
                                        :valutazione => (dati.valutazione unless dati.nil?),
                                        :annotazioni => (dati.annotazioni unless dati.nil?),
                                        :anno => Date.today.year).save
      }
    }
      end
    }
    index
  end

  protected
  
  def set_conditions
    case params[:filter]
    when 'all'
      []
    when 'attivi'
      ["personale.id IN (select personale_id FROM rapporti_di_lavoro WHERE (rapporti_di_lavoro.data_fine IS NULL) OR rapporti_di_lavoro.data_fine > ?)", 1.day.ago.to_date]
    when 'non_attivi'
      ["personale.id NOT IN (select personale_id FROM rapporti_di_lavoro WHERE (rapporti_di_lavoro.data_fine IS NULL) OR rapporti_di_lavoro.data_fine > ?)", 1.day.ago.to_date]
    when 'attivi_6_mesi'
      ["personale.id IN (select personale_id FROM rapporti_di_lavoro WHERE (rapporti_di_lavoro.data_fine IS NULL) OR rapporti_di_lavoro.data_fine > ?)", 6.month.ago.to_date]
    else
      []
    end
  end
  
  def conditions_for_collection
    set_conditions
  end

  def record_select_conditions_from_controller
    set_conditions
  end 
end
